package com.demo.common.utils;

import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;

import java.util.*;

/**
 * 树结构组装工具类
 * 继承使用
 *
 * @author molong
 * @since 2023/3/31
 */
@Data
public class TreeUtil{

    /**
     * 对象的id
     */
    private Long id;
    /**
     * 父级的id
     */
    private Long parentId;
    /**
     * 子项容器
     */
    private List<? extends TreeUtil> children;

    /**
     * 组装树结构
     * @param list 集合
     * @return 组装结果
     */
    public static <T extends TreeUtil> List<T> buildTree(List<T> list){
        if(CollectionUtils.isNotEmpty(list)){
            //组装树结构
            Map<Long, List<T>> parentChildrenMap = new HashMap<>(list.size());
            List<T> result = new LinkedList<>();
            for (T item : list) {
                item.setChildren(parentChildrenMap.computeIfAbsent(item.getId(), k -> new LinkedList<>()));
                Long parentId = item.getParentId();
                if (Objects.isNull(parentId)||Objects.equals(parentId,0L)) {
                    result.add(item);
                } else {
                    parentChildrenMap.computeIfAbsent(parentId, k -> new LinkedList<>())
                            .add(item);
                }
            }
            return result;
        }
        return new ArrayList<>();
    }

}
